<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>xeokit Example</title>
    <link href="../css/pageStyle.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js"></script>
</head>
<body>
<input type="checkbox" id="info-button"/>
<label for="info-button" class="info-button"><i class="far fa-3x fa-question-circle"></i></label>
<canvas id="myCanvas"></canvas>
<div class="slideout-sidebar">
    <img class="info-icon" src="../../assets/images/stl_logo.png"/>
    <h1>STLLoaderPlugin</h1>
    <h2>Configuring STLLoaderPlugin with a custom data source</h2>
    <h3>Components used</h3>
    <ul>
        <li>
            <a href="../../docs/class/src/viewer/Viewer.js~Viewer.html"
               target="_other">Viewer</a>
        </li>
        <li>
            <a href="../../docs/class/src/plugins/STLLoaderPlugin/STLLoaderPlugin.js~STLLoaderPlugin.html"
               target="_other">STLLoaderPlugin</a>
        </li>
    </ul>
</div>
</body>
<script type="module">

    //------------------------------------------------------------------------------------------------------------------
    // Import the modules we need for this example
    //------------------------------------------------------------------------------------------------------------------

    import {Viewer, STLLoaderPlugin} from "../../dist/xeokit-sdk.min.es.js";

    //------------------------------------------------------------------------------------------------------------------
    // Create a Viewer
    //------------------------------------------------------------------------------------------------------------------

    const viewer = new Viewer({
        canvasId: "myCanvas"
    });

    //------------------------------------------------------------------------------------------------------------------
    // Load STL model
    //------------------------------------------------------------------------------------------------------------------

    // Custom assets access strategy - implementation happens to be the same as STLDefaultDataSource
    class MyDataSource {
        getSTL(src, ok, error) {
            const request = new XMLHttpRequest();
            request.overrideMimeType("application/json");
            request.open('GET', src, true);
            request.responseType = 'arraybuffer';
            request.onreadystatechange = function () {
                if (request.readyState === 4) {
                    if (request.status === 200) {
                        ok(request.response);
                    } else {
                        error(request.statusText);
                    }
                }
            };
            request.send(null);
        }
    }

    const stlLoader = new STLLoaderPlugin(viewer, {
        dataSource: new MyDataSource()
    });

    const sceneModel = stlLoader.load({
        id: "myModel",
        src: "../../assets/models/stl/binary/spurGear.stl",
        smoothNormals: true
    });

    sceneModel.on("loaded", () => {
        viewer.cameraFlight.jumpTo(sceneModel);
        viewer.scene.on("tick", () => {
            viewer.camera.orbitYaw(0.4);
        })
    });
</script>
</html>